package educar.controllers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import educar.db.JPA;
import educar.gui.AdministradorView;
import educar.models.Cargo;
import educar.models.Docente;
import educar.models.Facultad;
import educar.models.userNotFound;
import educar.models.docenteNotFound;

public class CargoController implements ActionListener {
  private AdministradorView view;
  String nombreCargo;
  String codigo;
  int codigoEntero;
  private static JPA jpa = new JPA();
		
  public CargoController(AdministradorView view) {
    this.view=view;
  }

  public void actionPerformed(ActionEvent evento){
  {
    nombreCargo="";
	codigo="";					
	nombreCargo=view.getNombreCargo();
	codigo=view.getCodigoCargo();
    if(evento.getActionCommand().equals("Cargar")){
	  try {
	     codigoEntero=Integer.parseInt(codigo.trim());
	  } 
	  catch (Exception e) {
	    JOptionPane.showMessageDialog(null, "Codigo incorrecto");
		view.resetCamposCargo();} 
        if(nombreCargo.equals("")||codigo.equals(""))
		  JOptionPane.showMessageDialog(null, "Error en el ingreso de datos");
		else
		  try{
		    Cargo.getCargoByCodigo(codigo);
			JOptionPane.showMessageDialog(null, "Ya existe un cargo con ese codigo");
		  } 
          catch(userNotFound e) {
		    Cargo c = new Cargo(codigoEntero,nombreCargo);
			c.save();
			view.resetCamposCargo();
			JOptionPane.showMessageDialog(null,"Cargo insertado con exito");
			view.actualizarGraficas();
		  }
		}
		else {
		  if(evento.getActionCommand().equals("Eliminar")){
			try {
			  codigoEntero=Integer.parseInt(codigo.trim());
			}
			catch (Exception e){
			  JOptionPane.showMessageDialog(null,"Codigo incorrecto");
			  view.resetCamposCargo();}
			  try {
			    Cargo.getCargoByCodigo(codigo);
				Cargo.destroy("cargo","cod_cargo",codigo);  
				view.resetCamposCargo();
				JOptionPane.showMessageDialog(null,"Cargo eliminado con exito");
				view.actualizarGraficas();
			  }
			  catch( userNotFound m) {
			     JOptionPane.showMessageDialog(null,"No existe ningun cargo con ese codigo");
			  }
		} 
		else {
		  if(evento.getActionCommand().equals("Asignar")){
		  String codigoCargo = view.getCodigoCargoEnCargo();
		  String dedicacion = view.getDedicacionEnCargo();
		  String codigoFacultad = view.getCodigoFacultadEnCargo();
		  String dniDocente = view.getDniDocenteEnCargo();
		  if((codigoCargo.equals(""))||(dedicacion.equals(""))||(codigoFacultad.equals(""))||(dniDocente.equals(""))){
			 JOptionPane.showMessageDialog(null,"Error en los datos");
		  }
		  else {
		    String[] columns = {"dni","cod_facultad","cod_cargo","dedicacion"};
			PreparedStatement stm = jpa.newRecord("educar_dev.pertenece", columns);
			try {
			  int dni = 0;
			  int cod_facultad = 0;
			  int cod_cargo = 0;
			  try{
				 dni = Docente.getDocenteByDNI(dniDocente).getDni();
			  } 
			  catch(docenteNotFound e){};
			    stm.setInt(1,dni);
				try{
				  cod_facultad = Facultad.getFacultadByCodigo(codigoFacultad).getCodigo();
				} 
				catch(userNotFound e){};
				  stm.setInt(2,cod_facultad);
				  try{
				    cod_cargo = Cargo.getCargoByCodigo(codigoCargo).getCodigo();
				  } 
				  catch(userNotFound e){};
				    stm.setInt(3,cod_cargo);
					stm.setString(4,dedicacion); 
				  } 
			  catch (SQLException e) {
				e.printStackTrace();
			  }
	          try {
				stm.executeUpdate();
				JOptionPane.showMessageDialog(null,"Datos cargados exitosamente");
				view.actualizarGraficas();
			  }
	          catch (SQLException e) {
			    JOptionPane.showMessageDialog(null,"Datos previamente cargados en la tabla");
			  }
	        }
	      }
		}
	  }
    }
  }
			
  public static String[] listarNombres() throws SQLException{ 
    ArrayList<String> res= Cargo.getNombres();
    String [] cargos = new String[res.size()];
	for(int i =0; i<res.size(); i++){
	  cargos[i]=res.get(i);
	}
	return cargos;
  }
}		
	